package com.atguigu.yygh.common.handler;

import com.atguigu.yygh.common.exception.YYGHException;
import com.atguigu.yygh.common.result.R;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestControllerAdvice;

import java.sql.SQLException;

/*-------------------------------------------------
      时 间:   2023-03-13
      讲 师:   刘  辉
      描 述:   尚硅谷教学团队
---------------------------------------------------*/
@Slf4j
@RestControllerAdvice//标记的类：表示这是一个全局异常处理类
public class GlobalExceptionHandler {


    @ExceptionHandler(value = {Exception.class}) //兜底的异常处理方法
    public R handleException(Exception ex){
         ex.printStackTrace();
         return R.error();
    }

    @ExceptionHandler(value = {RuntimeException.class}) //特定的异常处理方法
    public R handleRuntimeException(RuntimeException ex){
        ex.printStackTrace();
        return R.error().message("运行时异常");
    }

    @ExceptionHandler(value = {ArithmeticException.class}) //特定的异常处理方法
    public R handleArithmeticException(ArithmeticException ex){
        log.error("1031记录的数学异常............");
        return R.error().message("数学异常");
    }
    @ExceptionHandler(value = {SQLException.class}) //特定的异常处理方法
    public R handleSQLException(SQLException ex){
        ex.printStackTrace();
        return R.error().message("SQL异常");
    }
    @ExceptionHandler(value = {NullPointerException.class}) //特定的异常处理方法
    public R handleNullPointerException(NullPointerException ex){
        ex.printStackTrace();
        return R.error().message("空指针异常");
    }

    @ExceptionHandler(value = {ClassCastException.class}) //特定的异常处理方法
    public R handleClassCastException(ClassCastException ex){
        ex.printStackTrace();
        return R.error().message("类型转换异常");
    }

    @ExceptionHandler(value = {YYGHException.class}) //特定的异常处理方法
    public R handleYYGHException(YYGHException ex){
        ex.printStackTrace();
        return R.error().code(ex.getCode()).message(ex.getMessage());
    }



}
